
/**
 * @File    xxx
 * @brief   xxx
 * @auhtor  xxx
 * @data    xxx
 * @see     xxx
 * @note    xxx
**/

#include "login.h"

#define CFG_FILE "./config.cfg"

// 设置配置项的值.
int setval(char *key, char *value)
{
    if(key==NULL || value==NULL) {
        return -1;
    }

	if(strcmp("ip", key) == 0) {
		strcpy(g_config.ip, value);
		return  0;
	}
	if(strcmp("port", key) == 0) {
		g_config.port = atoi(value);
		return  0;
	}
	if(strcmp("sid", key) == 0) {
		g_config.sid = atoi(value);
		return  0;
	}
	if(strcmp("mng_ip", key) == 0) {
		strcpy(g_config.mng_ip, value);
		return  0;
	}
	if(strcmp("mng_port", key) == 0) {
		g_config.mng_port = atoi(value);
		return  0;
	}
    if(strcmp("is_daemon", key) == 0) {
		g_config.is_daemon = atoi(value);
		return  0;
	}
    if(strcmp("conn_max", key) == 0) {
		g_config.conn_max = atoi(value);
		return  0;
	}
    if(strcmp("conn_timeout", key) == 0) {
		g_config.conn_timeout = atoi(value);
		return  0;
	}

	warnx("Error : key=[%s],value=[%s]\n", key, value);

	return -1;
}



// 去空格, 判断特殊字符. 都转为小写.
int trim(char *str)
{
	char *src, *dst;

    if(str==NULL) {
        return -1;
    }

	src = dst = str;

	// 如果是注释,则打标记.
	char *p = strchr(str, '#');
	if(p) {
		*p = '\0';
	}

	while(*src) {
		if(isalnum(*src) || *src == '_' || *src == '=') {
			*dst = tolower(*src);
			dst++;
		}
		src++;
	}

	// 设置结束标记.
	*dst = '\0';

	return 0;
}

// 设置配置项的值.
int init_value()
{
	bzero(&g_config, sizeof(g_config));

	strcpy(g_config.ip, "127.0.0.1");
	g_config.port = 60002;
	g_config.sid = 60002;
	strcpy(g_config.mng_ip, "127.0.0.1");
	g_config.mng_port = 60000;
    g_config.is_daemon = 0;
    g_config.conn_max = 0;
    g_config.conn_timeout = 180;

	return 0;
}

// 读配置文件.
int read_config()
{
	char line[256];
	char *value;
	FILE *fp;

	init_value();

	fp = fopen(CFG_FILE, "r");
	if(fp == NULL) {
		warn("fopen(%s) error", CFG_FILE);
		return -1;
	}

	while(fgets(line, sizeof(line)-1, fp)) {
		// 去特殊字符.
		trim(line);

		// 长度为0则不再处理.
		if(strlen(line) == 0) {
			continue;
		}

		// 找到值.
		value = strchr(line, '=');
		if(value) {
			*value = '\0';
			value++;
		}

		// 设置值.
		setval(line, value);
	}

	fclose(fp);

	return 0;
}


